package com.sz.biz.common.sup.service.impl;

import com.sz.biz.common.constants.CusUserConfigKeys;
import com.sz.biz.common.sup.entity.SupUserConfig;
import com.sz.biz.common.sup.service.SupUserConfigService;
import com.sz.biz.common.sup.dto.SupUserConfigDto;
import com.sz.common.base.service.AbstractService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;

import java.util.List;

/**
 * Function: TODO: ADD FUNCTION <br>
 * Author: Johnboy <br>
 * Date: 2017-10-12 14:26:00
 */
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class SupplierUserConfigServiceImpl extends AbstractService implements SupUserConfigService {
    @Override
    protected String getMapperNamespace() {
        return "SupUserConfigMapper";
    }

    @Override
    public void saveUserConfig(SupUserConfigDto supUserConfigDto) {
        if (StringUtils.hasLength(supUserConfigDto.getI18n())) {
            SupUserConfig cuc = new SupUserConfig();
            cuc.setUserId(supUserConfigDto.getUserId());
            cuc.setParamName(CusUserConfigKeys.KEY_I18N);
            cuc.setParamValue(supUserConfigDto.getI18n());
            saveOrUpdate(cuc);
        }

        if (StringUtils.hasLength(supUserConfigDto.getPageSize())) {
            SupUserConfig cuc = new SupUserConfig();
            cuc.setUserId(supUserConfigDto.getUserId());
            cuc.setParamName(CusUserConfigKeys.KEY_PAGE_SIZE);
            cuc.setParamValue(supUserConfigDto.getPageSize());
            saveOrUpdate(cuc);
        }
    }

    @Override
    public SupUserConfig findByUserIdAndParamName(SupUserConfig supUserConfig) {
        return (SupUserConfig) dao.findForObject(getSqlName("findByUserIdAndParamName"), supUserConfig);
    }

    @Override
    public SupUserConfigDto findAllConfigByUserId(int userId) {
        List<SupUserConfig> cucs = dao.findForList(getSqlName("findAllByUserId"), userId, SupUserConfig.class);
        if (cucs.size() == 0) {
            return null;
        }
        SupUserConfigDto dto = new SupUserConfigDto();
        dto.setUserId(userId);
        for (SupUserConfig cuc : cucs) {
            if (cuc.getParamName().equals(CusUserConfigKeys.KEY_PAGE_SIZE)) {
                dto.setPageSize(cuc.getParamValue());
            }
            if (cuc.getParamName().equals(CusUserConfigKeys.KEY_I18N)) {
                dto.setI18n(cuc.getParamValue());
            }
        }
        if (!StringUtils.hasLength(dto.getI18n())) {
            dto.setI18n("zh-CN");
        }
        if (!StringUtils.hasLength(dto.getPageSize())) {
            dto.setPageSize("50");
        }
        return dto;
    }

    @Override
    public String getUserPreferredLanguage(int userId) {
        SupUserConfigDto dto = findAllConfigByUserId(userId);
        if (dto == null) {
            return "default";
        }
        return dto.getI18n();
    }

    private void saveOrUpdate(SupUserConfig supUserConfig) {
        SupUserConfig cuc = findByUserIdAndParamName(supUserConfig);
        if (cuc == null) {
            dao.save(getSqlName("insertSelective"), supUserConfig);
        } else {
            cuc.setParamValue(supUserConfig.getParamValue());
            dao.update(getSqlName("updateByPrimaryKeySelective"), cuc);
        }
    }
}
